#![allow(unused)]

#[cfg(test)]
pub mod test_null {
    use super::dnull;

    #[test]
    fn tnull() {
        dnull();
    }
}
pub fn dnull() {
    /* Rust 没有 Null
        - 其它语言中:
            - Null 是一个值，它表示“没有值”
            - 一个变量可以处于两种状态:空值(null)、非空
        - Null引用: Billion Dollar Mistake
        - Null的问题在于: 当你尝试像使用非Null 值那样使用 Null值的时候，就会引起某种错误
        - Null的概念还是有用的: 因某种原因而变为无效或缺失的值

        rust中类似Null概念的枚举 Option<T>, 标准库中定义, 包含在预导入模块， 可直接使用
            Option<T> {
                Some(T),
                None,
            }

        与Null相比的优势
            - 与T是不同类型， 不可以直接当成T
            - 若要使用Option<T>中的T， 必须转换成T
     */
    println!(" --------- null ------------- ");
    let a = Some(5);
    let b = Some("a str");
    // 不能推断出类型
    let none: Option<u8> = None;

    // 不可以直接使用
    // let aa = 1 + a;
}